import java.util.Arrays;

public class Main {
    //判断数组中是否有连续三个奇数的情况
    public static void main(String[] args) {
        int[] arr = {1,1,2,3,3,3,4,5};
        //遍历
        int count = 0;
        for(int i = 0; i<arr.length; i++){
            if(arr[i] % 2 != 0){
                count++;
                if(count == 3){
                    break;
                }
            }
            else{
                count = 0;
            }
        }
        if(count == 3){
            System.out.println(true);
        }
        else{
            System.out.println(false);
        }
    }
    //leetcode169多数元素
    /*
    给定一个大小为 n 的数组 nums ，返回其中的多数元素。
    多数元素是指在数组中出现次数 ，大于 ⌊ n/2 ⌋ 的元素。
     */
    //①可以考虑排序找到n/2位置的数，就是所求--投机取巧
    //②暴力求解
    //③投票法
    public static void main7(String[] args) {
        int[] arr = { 3,2,3};
        Arrays.sort(arr);
        int ret = arr[0];
        int count = 0;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == ret) {
                count++;
            }
            else{
                count--;
            }
            if(count == 0) {
                ret = arr[i + 1];
            }
        }
        System.out.println(ret);
    }
    public static void main6(String[] args) {
      int[] arr = { 3,2,3};
      Arrays.sort(arr);
      System.out.println(arr[arr.length/2]);
    }
    /**
     * 关于找出数组中两个单个(不成对的数)
     * 通过异或找出分组方式
     * 再异或找到数字
     */
    //找出两个数字呢？两个单身狗--用异或结果去分组
    public static int[] func2(int[] arr) {
        int differ = func1(arr);//0011 0100 --- 0111 位上的一定是那两个单独数字的不同的位
        //那可以按 从右往左 第一(i)位是1 / 0 分为两组 --
        int count = 0;
        while(differ%2 == 0){//找到右移第count位之后 -- 出现第一个不同的位
            count++;
            differ >>= 1;
        }
        int[] a1 = new int[arr.length];
        int[] a2 = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {//按照arr[i]右移count位是1还是0分组
            if((arr[i] >> count )%2 == 0)//
                a1[i] = arr[i];
            else
                a2[i] = arr[i];//
        }
            return new int[]{func1(a1),func1(a2)};

    }
    public static void main5(String[] args) {
        int[] arr = {1,1,2,2,3,4,4,7,5,5};
        System.out.println(Arrays.toString(func2(arr)));
    }
    //找出只出现一次的数字
    //n^n == 0两个相同数异或为0--相同为0不同为1
    //0异或任何1
    //数字还是任何数字
    public static int func1(int[] arr){
        int res = 0;
        for(int i = 0; i < arr.length; i++){
            res =res^arr[i];
        }
        return res;
    }
    public static void main4(String[] args) {
        int[] arr = {2,2,4,3,3,5,5,7,7};
        System.out.println( func1(arr));
    }

    //leedcode1两数之和
    public static int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    return new int[]{i, j};
                }
            }
        }
        return null;
    }
    public static void main3(String[] args) {
        int[] nums = {2, 7, 11, 15};
        int[] result = twoSum(nums,9);
        System.out.println(Arrays.toString(result));
    }

    //奇数位于偶数前--类似于快排
    public static void Swap(int[] arr,int i,int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    public static void main2(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8};
        //i 遇到偶数停止，j 遇到奇数停止 -- 交换
        int j= arr.length-1;
        int i =0;
        while( i < j ) {
            while(i < j && arr[i]%2 != 0){
                i++;
            }
            while(i < j && arr[j]%2 == 0){
                j--;
            }
            Swap(arr,i,j);
        }
        System.out.println(Arrays.toString(arr));
    }
    //在函数中修改数组元素的值
    public static void transform(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i]* 2;
        }
    }
    public static void main1(String[] args) {
     int[] arr = {1,2,3,4,5};
     transform(arr);
     System.out.println(Arrays.toString(arr));
    }
}